package org.zdd.bookstore.model.service;

import org.zdd.bookstore.common.pojo.BSResult;
import org.zdd.bookstore.model.entity.custom.Cart;
import org.zdd.bookstore.model.entity.User;
import org.zdd.bookstore.model.entity.custom.OrderCustom;
import org.zdd.bookstore.pay.PayContext;

import java.util.List;

public interface IOrderService {

    /**
     * 根据用户id查询订单
     *
     * @param userId 用户id
     * @return
     */
    List<OrderCustom> findOrdersByUserId(int userId);

    /**
     * 根据商店id查询订单id
     *
     * @param storeId 商店id
     * @return
     */
    List<OrderCustom> findOrdersByStoreId(int storeId);

    /**
     * 创建订单
     *
     * @param cart      购物车实体
     * @param user      用户
     * @param express   订单详情
     * @param payMethod 支付方式
     * @return
     */
    BSResult createOrder(Cart cart, User user, String express, int payMethod);

    /**
     * 查询订单
     *
     * @param orderId 订单id
     * @return
     */
    BSResult findOrderById(String orderId);

    /**
     * 删除订单
     *
     * @param orderId 订单id
     * @return
     */
    BSResult deleteOrder(String orderId);

    /**
     * 支付成功返回支付信息
     *
     * @param payContext
     */
    void updateOrderAfterPay(PayContext payContext);

    /**
     * 发货
     *
     * @param orderId 订单id
     * @return
     */
    BSResult postOrder(String orderId);

    /**
     * 更新订单
     *
     * @param orderId 订单id
     * @return
     */
    OrderCustom findOrderCustomById(String orderId);

    /**
     * 更新订单
     *
     * @param orderCustom 订单详情
     * @return
     */
    BSResult updateOrder(OrderCustom orderCustom);

    /**
     * 确认收货
     *
     * @param orderId 订单id
     * @return
     */
    BSResult confirmReceiving(String orderId);
}
